/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ig.metrica.escenario;

import ejb.metrica.matriz.correlacion.MatrizDTO;
import ig.ejb.metrica.da.session.RelacionaccionessubcuentasDTO;
import ig.finanzas.BalanceDTO;
import ig.finanzas.RelacionesformatounidadessubcuentasbalancesDTO;
import ig.finanzas.RelacionsubcuentasproductosDTO;
import ig.metrica.ejb.bean.Posicionesacciones;
import ig.metrica.ejb.conbalance.ConfiguracionBalanceSBBean;
import ig.metrica.ejb.conbalance.ConfiguracionbalancesDTO;
import ig.metrica.ejb.conflujos.ConfiguracionflujosDTO;
import ig.metrica.ejb.html.GenerarHTML;
import ig.metrica.ui.confFlujos.formulada.ConFlujosFormuladosDTO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Properties;
import java.util.ArrayList;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import ig.finanzas.ContratoSimple;
import ig.finanzas.ContratoSimpleHome;
import ig.finanzas.DefinidorCalculoCambioEsperado;
import ig.finanzas.Moneda;
import ig.finanzas.MonedaHome;
import ig.finanzas.PosicionAccion;
import ig.finanzas.PosicionAccionHome;
import ig.finanzas.PosicionEspecie;
import ig.finanzas.PosicionEspecieHome;
import ig.finanzas.ProductoPK;
import ig.finanzas.Tasa;
import ig.finanzas.TasaHome;
import ig.finanzas.TasaPK;
import ig.finanzas.riesgo.FactorRiesgoMatrizCorrelacion;
import ig.metrica.ModeloSBean;
import ig.metrica.ejb.bean.Acciones;
import ig.metrica.ejb.bean.Adicionalescontratosrenta;
import ig.metrica.ejb.bean.Contratos;
import ig.metrica.ejb.bean.Contratossimples;
import ig.metrica.ejb.bean.Cuentas;
import ig.metrica.ejb.bean.Emisores;
import ig.metrica.ejb.bean.Empresas;
import ig.metrica.ejb.bean.Especies;
import ig.metrica.ejb.bean.Flujos;
import ig.metrica.ejb.bean.Libros;
import ig.metrica.ejb.bean.Monedas;
import ig.metrica.ejb.bean.Origenesdatos;
import ig.metrica.ejb.bean.Posicionesespecies;
import ig.metrica.ejb.bean.Productos;
import ig.metrica.ejb.bean.Relacionespeciessubcuenta;
import ig.metrica.ejb.bean.Relacionmonedassubcuentas;
import ig.metrica.ejb.bean.Tasas;
import ig.metrica.ejb.bean.Tasasdepagos;
import ig.metrica.ejb.bean.Unidadesnegocios;
import ig.metrica.ejb.bean.Valorescontratos;
import ig.metrica.ejb.bean.Valoresmonedas;
import ig.metrica.ejb.bean.Valorestasas;
import ig.util.ConexionServer;
import ig.util.ejb.IGBean;
import ig.util.ejb.IGSessionBean;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Timestamp;
import javax.swing.Timer;


/**
 *
 * @author jsanchez
 */
public class GeneraEscenarioBussines extends IGSessionBean {

    //==============================================================================
    //                              GRABAR DATOS
    //==============================================================================

    protected void GrabarDatos(Monedas mone) {
        try {
            if (prepMoneda == null) {
                String varSqlInsert = "Insert into Monedas(ID,NOMBRE) values(?,?)";
                prepMoneda = conn.prepareStatement(varSqlInsert);
            }
            prepMoneda.setLong(1, mone.getID());
            prepMoneda.setString(2, mone.getNOMBRE().trim());
            if (!this.datosActuales && !hMonedas.containsKey(mone.getNOMBRE().trim())) {
                hMonedas.put(mone.getNOMBRE().trim(), mone.getNOMBRE().trim());
                executeBatch(prepMoneda,++totalMDA);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Monedas:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepMoneda.close();
                prepMoneda=null;
            } catch (Exception ex) {
            }
        }
    }
    
    protected  void GrabarDatos(Valoresmonedas valo) {
        Long mIdmoneda = valo.getIDMONEDA();
        try {
            String mFecha = valo.getFECHA();
            String fechaCortada = mFecha.substring(0, 10).trim();
            java.sql.Date fecha1 = java.sql.Date.valueOf(fechaCortada);
            Double mValor = valo.getVALOR();
            if (prepValoresMoneda == null) {
                String varSqlInsert = "Insert into Valoresmonedas(IDMONEDA,FECHA,VALOR) values(?,?,?)";
                prepValoresMoneda = conn.prepareStatement(varSqlInsert);
            }
            prepValoresMoneda.setLong(1, mIdmoneda);
            prepValoresMoneda.setDate(2, fecha1);
            prepValoresMoneda.setDouble(3, mValor);
            if (!this.datosActuales && !hValoresMonedas.containsKey(mIdmoneda.toString()+mFecha)) {
                hValoresMonedas.put(mIdmoneda.toString()+mFecha,mIdmoneda.toString()+mFecha);
                //prepValoresMoneda.executeUpdate();
                this.executeBatch(prepValoresMoneda,++totalVM);
            }
        } catch (Exception e) {
//            e.printStackTrace();
            String key = "[" + modelo + "]:Valoresmonedas:" + e.toString();
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepValoresMoneda.close();
                prepValoresMoneda=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Tasas tasa) {
        Long mId = tasa.getID();
        try {
            String mNombre = tasa.getNOMBRE();
            String mTipo = tasa.getTIPO();
            String mModalidadtasa = tasa.getMODALIDADTASA();
            Integer mNominalmodalidadtasa = tasa.getNOMINALMODALIDADTASA();
            if (prepTasas == null) {
                String varSqlInsert = "Insert into Tasas(ID,NOMBRE,TIPO,MODALIDADTASA,NOMINALMODALIDADTASA) values(?,?,?,?,?)";
                prepTasas = conn.prepareStatement(varSqlInsert);
            }
            prepTasas.setLong(1, mId);
            prepTasas.setString(2, mNombre);
            prepTasas.setString(3, mTipo);
            prepTasas.setString(4, mModalidadtasa);
            prepTasas.setInt(5, mNominalmodalidadtasa);
            if (!this.datosActuales && !hTasas.containsKey(mId)) {
                hTasas.put(mId,mId);
                this.executeBatch(prepTasas,++totalTSA);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Tasas:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepTasas.close();
                prepTasas=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Valorestasas valo) {
        Long mIdtasa = valo.getIDTASA();
        try {
            String mFecha = valo.getFECHA();
            String fechaCortada = mFecha.substring(0, 10).trim();
            java.sql.Date fecha1 = java.sql.Date.valueOf(fechaCortada);
            Integer mPosicion = valo.getPOSICION();
            Double mValor = valo.getVALOR();
            if(prepValoresTasa==null){
                String varSqlInsert = "Insert into Valorestasas(IDTASA,FECHA,POSICION,VALOR) values(?,?,?,?)";
                prepValoresTasa = conn.prepareStatement(varSqlInsert);
            }
            prepValoresTasa.setLong(1, mIdtasa);
            prepValoresTasa.setDate(2, fecha1);
            prepValoresTasa.setInt(3, mPosicion);
            prepValoresTasa.setDouble(4, mValor);
            if (!this.datosActuales && !hValoresTasas.containsKey(mIdtasa + fecha1.toString() + mPosicion)) {
                hValoresTasas.put(mIdtasa + fecha1.toString() + mPosicion, mIdtasa + fecha1.toString() + mPosicion);
                this.executeBatch(prepValoresTasa, ++totalVT);
            }        } catch (Exception e) {
            String key = ("[" + modelo + "]:Valorestasas:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepValoresTasa.close();
                prepValoresTasa=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Empresas empr) {
        Long mId = empr.getID();
        try {
            String mNombre = empr.getNOMBRE();
            if (prepEmpresas == null) {
                String varSqlInsert = "Insert into Empresas(ID,NOMBRE) values(?,?)";
                prepEmpresas = conn.prepareStatement(varSqlInsert);
            }
            prepEmpresas.setLong(1, mId);
            prepEmpresas.setString(2, mNombre);
            if (!this.datosActuales && !hEmpresas.containsKey(mNombre))  {
                hEmpresas.put(mNombre,mNombre);
                this.executeBatch(prepEmpresas, ++totalEm);
                CEmpresas.add(empr);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Empresas:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepEmpresas.close();
                prepEmpresas=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Unidadesnegocios unid) {
        Long mId = unid.getID();
        try {
            String mNombre = unid.getNOMBRE();
            Long mIdempresa = unid.getIDEMPRESA();
            if(prepUnidesNegocios==null){
                String varSqlInsert = "Insert into Unidadesnegocios(ID,NOMBRE,IDEMPRESA) values(?,?,?)";
                prepUnidesNegocios = conn.prepareStatement(varSqlInsert);
            }
            prepUnidesNegocios.setLong (1, mId);
            prepUnidesNegocios.setString(2, mNombre);
            prepUnidesNegocios.setLong (3, mIdempresa);
            if (!this.datosActuales && !hUnidadesNegocios.containsKey(mId+""+mIdempresa)) {
                hUnidadesNegocios.put(mId+""+mIdempresa,mId+""+mIdempresa);
                this.executeBatch(prepUnidesNegocios, ++totalUN);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Unidadesnegocios:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepUnidesNegocios.close();
                prepUnidesNegocios=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Libros libr) throws Exception {
        String varSqlInsert = "Insert into Libros(ID,NOMBRE) values(?,?)";
        Long mId = libr.getID();
        String mNombre = libr.getNOMBRE();
        try {
            prep = conn.prepareStatement(varSqlInsert);
            prep.setLong (1, mId);
            prep.setString(2, mNombre.trim());
            if (!this.datosActuales) {
                prep.execute();
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Libros:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
            throw e;
        } finally {
            try {
                prep.close();
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Cuentas cuen) {
        String varSqlInsert = "Insert into Cuentas(ID,NOMBRE,IDLIBRO) values(?,?,?)";
        Long mId = cuen.getID();
        String mNombre = cuen.getNOMBRE();
        Long mIdlibro = cuen.getIDLIBRO();
        try {
            prep = conn.prepareStatement(varSqlInsert);
            prep.setLong (1, mId);
            prep.setString(2, mNombre);
            prep.setLong (3, mIdlibro);
            if (!this.datosActuales) {
                prep.execute();
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Cuentas:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prep.close();
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Productos prod) {
        String varSqlInsert = "Insert into Productos(ID,NOMBRE,ACTIVO,IDMONEDA,IDCUENTA) values(?,?,?,?,?)";
        Long mId = prod.getID();
        String mNombre = prod.getNOMBRE();
        int mActivo = prod.getACTIVO();
        Long mIdmoneda = prod.getIDMONEDA();
        Long mIdcuenta = prod.getIDCUENTA();
        try {
            prep = conn.prepareStatement(varSqlInsert);
            prep.setLong (1, mId);
            prep.setString(2, mNombre);
            prep.setInt(3, mActivo);
            prep.setLong (4, mIdmoneda);
            prep.setLong (5, mIdcuenta);
            if (!this.datosActuales) {
                prep.execute();
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Productos:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prep.close();
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Emisores emis) {
        Long mId = emis.getID();
        try {
            String mNombre = emis.getNOMBRE();
            String mNit = emis.getNIT();
            if (this.prepEmisores == null) {
                String varSqlInsert = "Insert into Emisores(ID,NOMBRE,NIT) values(?,?,?)";
                prepEmisores = conn.prepareStatement(varSqlInsert);
            }
            prepEmisores.setLong (1, mId);
            prepEmisores.setString(2, mNombre);
            prepEmisores.setString(3, mNit);
            if (!this.datosActuales && !hEmisores.containsKey(mId)) {
                hEmisores.put(mId, mId);
                prepEmisores.executeUpdate();
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Emisores:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepEmisores.close();
                prepEmisores = null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Acciones acci) {
        Long mId = acci.getID();
        try {
            String mNombre = acci.getNOMBRE().trim();
            mNombre=mNombre.length()>50?mNombre.substring(0,49):mNombre;
            Long mBursatil = acci.getBURSATIL();
            Long mIdmoneda = acci.getIDMONEDA();
            Long mIdemisor = acci.getIDEMISOR();
            if (this.prepAcciones == null) {
                String varSqlInsert = "Insert into Acciones(ID,NOMBRE,BURSATIL,IDMONEDA,IDEMISOR) values(?,?,?,?,?)";
                prepAcciones = conn.prepareStatement(varSqlInsert);
            }
            prepAcciones.setLong (1, mId);
            prepAcciones.setString(2, mNombre);
            prepAcciones.setLong (3, mBursatil);
            prepAcciones.setLong (4, mIdmoneda);
            prepAcciones.setLong (5, mIdemisor);
            if (!this.datosActuales && !hAcciones.containsKey(mNombre)) {
                hAcciones.put(mNombre,mNombre);
                this.executeBatch(prepAcciones,++totalAC);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Acciones:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepAcciones.close();
                prepAcciones=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(RelacionaccionessubcuentasDTO dto) {
        try {
                if (prepRelacionaccionessubcuentas == null) {
                    prepRelacionaccionessubcuentas = conn.prepareStatement("INSERT INTO RELACIONACCIONESSUBCUENTAS(IDFORMATO, UNIDADCAPTURA, SUBCUENTA, IDACCION) VALUES(?, ?, ?, ?)");
                }
                prepRelacionaccionessubcuentas.setLong(1, dto.getIdformato());
                prepRelacionaccionessubcuentas.setString(2, dto.getUnidadcaptura());
                prepRelacionaccionessubcuentas.setString(3, dto.getSubcuenta());
                prepRelacionaccionessubcuentas.setLong(4, dto.getIdaccion());
                if (!this.datosActuales && !hRelacionaccionessubcuentas.containsKey(dto.getIdformato()+""+dto.getUnidadcaptura()+""+dto.getSubcuenta()+""+dto.getIdaccion())){
                    hRelacionaccionessubcuentas.put(dto.getIdformato()+""+dto.getUnidadcaptura()+""+dto.getSubcuenta()+""+dto.getIdaccion(),dto.getIdformato()+""+dto.getUnidadcaptura()+""+dto.getSubcuenta()+""+dto.getIdaccion());
                    this.executeBatch(prepRelacionaccionessubcuentas, ++totalRAS);
                }
        } catch (Exception e) {
            String key = "[" + modelo + "]:Relacion subcuentas productos:" + e.toString();
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepRelacionaccionessubcuentas.close();
                prepRelacionaccionessubcuentas = null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(RelacionsubcuentasproductosDTO dto) {
        try {
            if (prepRelacionsubcuentasproductos == null) {
                prepRelacionsubcuentasproductos = conn.prepareStatement("INSERT INTO RELACIONSUBCUENTASPRODUCTOS (IDFORMATO, UNIDADDECAPTURA, SUBCUENTA, IDPRODUCTO) VALUES(?, ?, ?, ?)");
            }
            prepRelacionsubcuentasproductos.setLong(1, dto.getIdformato());
            prepRelacionsubcuentasproductos.setString(2, dto.getUnidaddecaptura());
            prepRelacionsubcuentasproductos.setString(3, dto.getSubcuenta());
            prepRelacionsubcuentasproductos.setLong(4, dto.getIdproducto());
            if (!this.datosActuales && !hRelacionsubcuentasproductos.containsKey(dto.getIdformato()+""+dto.getUnidaddecaptura()+""+dto.getSubcuenta()+""+dto.getIdproducto())) {
                hRelacionsubcuentasproductos.put(dto.getIdformato()+""+dto.getUnidaddecaptura()+""+dto.getSubcuenta()+""+dto.getIdproducto(),dto.getIdformato()+""+dto.getUnidaddecaptura()+""+dto.getSubcuenta()+""+dto.getIdproducto());
                this.executeBatch(prepRelacionsubcuentasproductos,++totalRAP);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Relacion subcuentas productos:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepRelacionsubcuentasproductos.close();
                prepRelacionsubcuentasproductos = null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Tasasdepagos tasa) {
        Long mIdcontrato = tasa.getIDCONTRATO();
        try {
            if(prepTasasdepagos==null){
                String varSqlInsert = "Insert into Tasasdepagos(IDCONTRATO,FORMA,SPREAD,FECHAINICIO,FECHAFIN,MODALIDADSPREAD,NOMINALMODALIDADSPREAD,MODALIDADPAGO,NOMINALMODALIDADPAGO,IDTASAREFERENCIA,LIQUIDAFINDEPERIODO) values(?,?,?,?,?,?,?,?,?,?,?)";
                prepTasasdepagos = conn.prepareStatement(varSqlInsert);
            }
            int mForma = tasa.getFORMA();
            double mSpread = tasa.getSPREAD();
            String mFechainicio = tasa.getFECHAINICIO();
            String fechaCortada1 = mFechainicio.substring(0, 10).trim();
            java.sql.Date fechainicio1 = java.sql.Date.valueOf(fechaCortada1);
            String mFechafin = tasa.getFECHAFIN();
            String fechaCortada2 = mFechafin.substring(0, 10).trim();
            java.sql.Date fechafin1 = java.sql.Date.valueOf(fechaCortada2);
            String mModalidadspread = tasa.getMODALIDADSPREAD();
            int mNominalmodalidadspread = tasa.getNOMINALMODALIDADSPREAD();
            String mModalidadpago = tasa.getMODALIDADPAGO();
            int mNominalmodalidadpago = tasa.getNOMINALMODALIDADPAGO();
            Long mIdtasareferencia = tasa.getIDTASAREFERENCIA();
            int mLiquidafindeperiodo = tasa.getLIQUIDAFINDEPERIODO();

            prepTasasdepagos.setLong (1, mIdcontrato);
            prepTasasdepagos.setInt(2, mForma);
            prepTasasdepagos.setDouble(3, mSpread);
            prepTasasdepagos.setDate(4, fechainicio1);
            prepTasasdepagos.setDate(5, fechafin1);
            prepTasasdepagos.setString(6, mModalidadspread);
            prepTasasdepagos.setInt(7, mNominalmodalidadspread);
            prepTasasdepagos.setString(8, mModalidadpago);
            prepTasasdepagos.setInt(9, mNominalmodalidadpago);
            prepTasasdepagos.setLong (10, mIdtasareferencia);
            prepTasasdepagos.setInt(11, mLiquidafindeperiodo);
            if (!this.datosActuales && !hTasasdepagos.containsKey(mIdcontrato+fechaCortada1+fechaCortada2)) {
                hTasasdepagos.put(mIdcontrato+fechaCortada1+fechaCortada2,mIdcontrato+fechaCortada1+fechaCortada2);
                this.executeBatch(prepTasasdepagos,++totalTP);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Tasasdepagos:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepTasasdepagos.close();
                prepTasasdepagos=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Flujos fluj) {
        Long mIdcontrato = fluj.getIDCONTRATO();
        try {
                String mFecha = fluj.getFECHA();
                String fechaCortada = mFecha.substring(0, 10).trim();
                java.sql.Date fecha1 = java.sql.Date.valueOf(fechaCortada);
                double mCapital = fluj.getCAPITAL();
                double mInteresfijo = fluj.getINTERESFIJO();
                double mInteresvariable = fluj.getINTERESVARIABLE();
                int mConocido = fluj.getCONOCIDO();
                if (prepFlujos == null) {
                    String varSqlInsert = "Insert into Flujos(IDCONTRATO,FECHA,CAPITAL,INTERESFIJO,INTERESVARIABLE,CONOCIDO,FORMULADO) values(?,?,?,?,?,?,?)";
                    prepFlujos = conn.prepareStatement(varSqlInsert);
                }
                prepFlujos.setLong (1, mIdcontrato);
                prepFlujos.setDate(2, fecha1);
                prepFlujos.setDouble(3, mCapital);
                prepFlujos.setDouble(4, mInteresfijo);
                prepFlujos.setDouble(5, mInteresvariable);
                prepFlujos.setInt(6, mConocido);
                prepFlujos.setInt(7, fluj.getFORMULADO());
                if (!this.datosActuales && !hFlujos.containsKey(mIdcontrato+fechaCortada)) {
                    hFlujos.put(mIdcontrato+fechaCortada,mIdcontrato+fechaCortada);
                    this.executeBatch(prepFlujos, ++totalFLJ);
                }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Flujos:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepFlujos.close();
                prepFlujos=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Contratossimples cont) {
        try {
            if (prepContratossimples == null) {
                String varSqlInsert = "Insert into Contratossimples(ID,NOMBRE,TIPO,IDEMISOR,TASA_DESCUENTO) values(?,?,?,?,?)";
                prepContratossimples = conn.prepareStatement(varSqlInsert);
            }
            prepContratossimples.setLong (1, cont.getID());
            prepContratossimples.setString(2, cont.getNOMBRE());
            prepContratossimples.setString(3, cont.getTIPO());
            prepContratossimples.setLong(4, cont.getIDEMISOR());
            prepContratossimples.setDouble(5, cont.getTasaDeDescuento());
            if (!this.datosActuales && !hContratossimples.containsKey(cont.getNOMBRE().trim())) {
                hContratossimples.put(cont.getNOMBRE().trim(),cont.getNOMBRE().trim());
                this.executeBatch(prepContratossimples, ++totalCTO);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Contratossimples:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepContratossimples.close();
                prepContratossimples = null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Posicionesacciones pacc) {
        Long mId = pacc.getID();
        try {
            double mUnidades = pacc.getUNIDADES();
            Long mIdaccion = pacc.getIDACCION();
            if(this.prepPosicionesacciones==null){
                String varSqlInsert = "Insert into Posicionesacciones(ID,UNIDADES,IDACCION,TIPO) values(?,?,?,?)";
                prepPosicionesacciones = conn.prepareStatement(varSqlInsert);
            }
            prepPosicionesacciones.setLong (1, mId);
            prepPosicionesacciones.setDouble(2, mUnidades);
            prepPosicionesacciones.setLong (3, mIdaccion);
            prepPosicionesacciones.setString(4, pacc.getTipo());
            if (!this.datosActuales && !hPosicionesacciones.containsKey(mId)) {
                hPosicionesacciones.put(mId,mId);
                this.executeBatch(prepPosicionesacciones, ++totalPA);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Posicionesacciones:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepPosicionesacciones.close();
                prepPosicionesacciones=null;
            } catch (Exception ex) {
            }
        }
    }

    protected boolean GrabarDatos(Contratos cont) {
        //id4,"ContratosSimples",id2,id1,SALDOCONTABLE,fechaInicial,saldoMora,alturaMora,fechaVencimiento,formaCalculo,valorActual,valorNominal,proyectar,CUOTA_OR_FECHA
        //int mID,String mTIPO,int mIDPRODUCTO,int mIDUNIDADNEGOCIO,Double SALDOCONTABLE,String FECHAINICIAL,Double SALDOMORA,Integer ALTURAMORA,String fechaVencimiento, Integer formaCalculo, Double valorActual, Double valorNominal, Integer proyectar,/*Double cuota,*/Integer cuota_or_fecha
        Long mId = cont.getID();
        try {
            String mTipo = cont.getTIPO();
            Long mIdproducto = cont.getIDPRODUCTO();
            Long mIdunidadnegocio = cont.getIDUNIDADNEGOCIO();
            Double SALDOCONTABLE = cont.getSALDOCONTABLE();
            String mFecha = cont.getFECHAINICIAL();
            String fechaCortada = mFecha != null ? mFecha.substring(0, 10).trim() : null;
            java.sql.Date fecha1 = fechaCortada != null ? java.sql.Date.valueOf(fechaCortada) : null;
            Integer proyectar = cont.getProyectar();
            Double saldoMora = cont.getSALDOMORA();
            Integer alturaMora = cont.getALTURAMORA();
            if(this.prepContratos==null){
                String varSqlInsert = "Insert into Contratos(ID,TIPO,IDPRODUCTO,IDUNIDADNEGOCIO,SALDOCONTABLE,FECHAINICIAL,SALDOMORA,ALTURAMORA,PROYECTAR, VALOR_NOMINAL) values(?,?,?,?,?,?,?,?,?,?)";
                prepContratos = conn.prepareStatement(varSqlInsert);
            }
            prepContratos.setLong (1, mId);
            prepContratos.setString(2, mTipo);
            prepContratos.setLong(3, mIdproducto);
            prepContratos.setLong(4, mIdunidadnegocio);
            if (SALDOCONTABLE != null) {
                prepContratos.setDouble(5, SALDOCONTABLE);
            } else {
                prepContratos.setNull(5, java.sql.Types.DOUBLE);
            }

            if (fecha1 != null) {
                prepContratos.setDate(6, fecha1);
            } else {
                prepContratos.setNull(6, Types.DATE);
            }

            if (saldoMora != null) {
                prepContratos.setDouble(7, saldoMora);
            } else {
                prepContratos.setNull(7, Types.DOUBLE);
            }

            if (alturaMora != null) {
                prepContratos.setInt(8, alturaMora);
            } else {
                prepContratos.setNull(8, Types.INTEGER);
            }

            if (proyectar != null) {
                prepContratos.setInt(9, proyectar);
            } else {
                prepContratos.setNull(9, java.sql.Types.INTEGER);
            }

            if (cont.getValorNominal() != null) {
                prepContratos.setDouble(10, cont.getValorNominal());
            } else {
                prepContratos.setNull(10, java.sql.Types.DOUBLE);
            }

            if (!this.datosActuales && !hContratos.containsKey(mId)) {
                hContratos.put(mId,mId);
                this.executeBatch(prepContratos,++totalCTOS);
            }
            return true;
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Contratos:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
               prepContratos.close();
               prepContratos=null;
            } catch (Exception ex) {
            }
        }
        return false;
    }

    protected void GrabarDatos(Valorescontratos valo) {
        Long mIdcontrato = valo.getIDCONTRATO();
        try {
            String mFecha = valo.getFECHA();
            String fechaCortada = mFecha.substring(0, 10).trim();
            java.sql.Date fecha1 = java.sql.Date.valueOf(fechaCortada);
            double mValor = valo.getVALOR();
            if(prepValorescontratos==null){
                String varSqlInsert = "Insert into Valorescontratos(IDCONTRATO,FECHA,VALOR) values(?,?,?)";
                prepValorescontratos = conn.prepareStatement(varSqlInsert);
            }
            prepValorescontratos.setLong (1, mIdcontrato);
            prepValorescontratos.setDate(2, fecha1);
            prepValorescontratos.setDouble(3, mValor);
            if (!this.datosActuales && !hValorescontratos.containsKey(mIdcontrato+fechaCortada)) {
                hValorescontratos.put(mIdcontrato+fechaCortada,mIdcontrato+fechaCortada);
                this.executeBatch(prepValorescontratos, ++totalVC);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Valorescontratos:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepValorescontratos.close();
                prepValorescontratos=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Posicionesespecies posi) {
        try {
            if (prepPosicionesespecies == null) {
                String varSqlInsert = "Insert into Posicionesespecies(ID,VALORNOMINAL,TIPO,IDESPECIE,TASA_DESCUENTO) values(?,?,?,?,?)";
                prepPosicionesespecies = conn.prepareStatement(varSqlInsert);
            }
            prepPosicionesespecies.setLong (1, posi.getID());
            prepPosicionesespecies.setDouble(2, posi.getVALORNOMINAL());
            prepPosicionesespecies.setString(3, posi.getTIPO());
            prepPosicionesespecies.setLong (4, posi.getIDESPECIE());
            prepPosicionesespecies.setDouble(5, posi.getTasaDeDescuento());
            if (!this.datosActuales && !hPosicionesespecies.containsKey(posi.getID())) {
                hPosicionesespecies.put(posi.getID(), posi.getID());
                this.executeBatch(prepPosicionesespecies, ++totaolPES);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Posicionesespecies:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepPosicionesespecies.close();
                prepPosicionesespecies = null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Adicionalescontratosrenta adic) {
        Long mIdcontrato = adic.getIDCONTRATO();
        try {
            double mTircompra = adic.getTIRCOMPRA();
            double mTirvaloracion = adic.getTIRVALORACION();
            double mValorafecha1 = adic.getVALORAFECHA1();
            double mValorafecha2 = adic.getVALORAFECHA2();
            double mValoraTirfecha1 = adic.getVALORATIRFECHA1();
            double mValoraTirfecha2 = adic.getVALORATIRFECHA2();
            if (prepAdicionalescontratosrenta == null) {
                String varSqlInsert = "Insert into ADICONTRATOSRENTABILIDAD(IDCONTRATO,TIRCOMPRA,TIRVALORACION,VALORAFECHA1,VALORAFECHA2,VALORATIRFECHA1,VALORATIRFECHA2) values(?,?,?,?,?,?,?)";
                prepAdicionalescontratosrenta = conn.prepareStatement(varSqlInsert);
            }
            prepAdicionalescontratosrenta.setLong (1, mIdcontrato);
            prepAdicionalescontratosrenta.setDouble(2, mTircompra);
            prepAdicionalescontratosrenta.setDouble(3, mTirvaloracion);
            prepAdicionalescontratosrenta.setDouble(4, mValorafecha1);
            prepAdicionalescontratosrenta.setDouble(5, mValorafecha2);
            prepAdicionalescontratosrenta.setDouble(6, mValoraTirfecha1);
            prepAdicionalescontratosrenta.setDouble(7, mValoraTirfecha2);
            if (!this.datosActuales) {
                this.executeBatch(prepAdicionalescontratosrenta,++totalACR);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Adicionalescontratosrenta:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepAdicionalescontratosrenta.close();
                prepAdicionalescontratosrenta = null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Especies espe) {
        Long mId = espe.getID();
        try {
            String mIsin = espe.getISIN();
            String mNombre = espe.getNOMBRE();
            double mValoremision = espe.getVALOREMISION();
            int mDiasxano = espe.getDIASXANO();
            int mDiasxmes = espe.getDIASXMES();
            long mIdmoneda = espe.getIDMONEDA();
            long mIdemisor = espe.getIDEMISOR();
            if (this.prepEspecies == null) {
                String varSqlInsert = "Insert into Especies(ID,ISIN,NOMBRE,VALOREMISION,DIASXANO,DIASXMES,IDMONEDA,IDEMISOR) values(?,?,?,?,?,?,?,?)";
                prepEspecies = conn.prepareStatement(varSqlInsert);
            }
            prepEspecies.setLong (1, mId);
            prepEspecies.setString(2, mIsin.trim());
            prepEspecies.setString(3, mNombre.trim());
            prepEspecies.setDouble(4, mValoremision);
            prepEspecies.setInt(5, mDiasxano);
            prepEspecies.setInt(6, mDiasxmes);
            prepEspecies.setLong(7, mIdmoneda);
            prepEspecies.setLong(8, mIdemisor);
            if (!this.datosActuales && !hEspecies.containsKey(mIsin)) {
                hEspecies.put(mIsin,mIsin);
                this.executeBatch(prepEspecies,++totalESP);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Especies:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepEspecies.close();
                prepEspecies=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Relacionmonedassubcuentas rela) {
        String mMoneda = rela.getMONEDA();
        try {
            if (prepRelacionmonedassubcuentas == null) {
                String varSqlInsert = "Insert into RELACIONMONEDASSUBCUENTAS(MONEDA,FORMATO,UNIDAD,SUBCUENTA,POSICIONACTIVA,POSICIONPASIVA) values(?,?,?,?,?,?)";
                prepRelacionmonedassubcuentas = conn.prepareStatement(varSqlInsert);
            }
            int mFormato = rela.getFORMATO();
            String mUnidad = rela.getUNIDAD();
            String mSubcuenta = rela.getSUBCUENTA();
            double mPosicionactiva = rela.getPOSICIONACTIVA();
            double mPosicionpasiva = rela.getPOSICIONPASIVA();
            prepRelacionmonedassubcuentas.setString(1, mMoneda);
            prepRelacionmonedassubcuentas.setInt(2, mFormato);
            prepRelacionmonedassubcuentas.setString(3, mUnidad);
            prepRelacionmonedassubcuentas.setString(4, mSubcuenta);
            prepRelacionmonedassubcuentas.setDouble(5, mPosicionactiva);
            prepRelacionmonedassubcuentas.setDouble(6, mPosicionpasiva);
            if (!this.datosActuales && !hRelacionmonedassubcuentas.containsKey(mMoneda+mFormato)) {
                hRelacionmonedassubcuentas.put(mMoneda+mFormato,mMoneda+mFormato);
                this.executeBatch(prepRelacionmonedassubcuentas,++totalRMS);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Relacionespeciessubcuenta.:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepRelacionmonedassubcuentas.close();
                prepRelacionmonedassubcuentas=null;
            } catch (Exception ex) {
            }
        }
    }

    @SuppressWarnings("deprecation")
    protected void GrabarDatos(BalanceDTO DTO) {
        Integer PUC = DTO.getPuc();
        Long MONEDA = DTO.getMoneda();
        try {
            Double VALOR = DTO.getValor();
            Long PRODUCTO = DTO.getProducto();
            Long UNIDAD_DE_NEGOCIO = DTO.getUnidadDeNegocio();

            if (CConfiguracionBalances == null) {
                try {
                    CConfiguracionBalances = balanceLocal.findByModelo(this.idModelo);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
            for (Iterator it = CConfiguracionBalances.iterator(); it.hasNext();) {
                ConfiguracionbalancesDTO elem = (ConfiguracionbalancesDTO) it.next();
                if (DTO.getPuc().equals(elem.getPuc())) {
                    Long idContrato_ = 1300000000L + DTO.getPuc();
                    while (true) {
                        if (this.buscarPorNombre(9, String.valueOf(idContrato_),false,"Balance") == 0) {
                            break;
                        } else {
                            idContrato_++;
                        }
                    }
                    this.GrabarDatos(new Contratos(idContrato_, "Balance", DTO.getProducto(), DTO.getUnidadDeNegocio(), null, null, null, null, null, null, null, null, 0,DTO.getIDORIGENDATO()));
                    this.GrabarDatos(new Contratossimples(idContrato_, idContrato_.toString(), "NEGOCIABLE", this.buscarPorNombre(3, DTO.getEmisor().trim(),false,"Contrato Simple"), 0.0, DTO.getIDORIGENDATO()));

                    //VERIFICO SI EL CONTRATO EN CUESTION YA FUE PROCESADO Y SU CONFIGURACION FUE SALDO CAPITAL
                    if (!ContratosSaldoProcesado.containsKey(elem.getPuc())) {
                        Timestamp newFecha = (Timestamp) this.fechaCorte.clone();//HACEMOS LA FECHA DE CORTE UNA VARIABLE LOCAL
                        newFecha.setDate(newFecha.getDate() + elem.getDuracion());//ADICIONAMOS A LA FECHA DE CORTE EL VALOR DE LA DURACION
                        Double valor = new Double(((DTO.getValor() * elem.getProcentaje()) / 100));//CALCULAMOS EL NUEVO VALOR DE LA MORA
                        GrabarDatos(new Flujos(idContrato_, newFecha.toString(), valor, 0.0, 0.0, 1, 0,DTO.getIDORIGENDATO()));//GUARDAMOS EL NUEVO FLUJO
                    }
                }
            }
            if(prepBalance==null){
                String varSqlInsert = "INSERT INTO BALANCE(PUC, VALOR, IDMONEDA, IDPRODUCTO, UNIDADDENEGOCIO) VALUES(?, ?, ?, ?, ?)";
                prepBalance = conn.prepareStatement(varSqlInsert);
            }
            prepBalance.setInt(1, PUC);
            prepBalance.setDouble(2, VALOR);
            prepBalance.setLong(3, MONEDA);
            prepBalance.setLong(4, PRODUCTO);
            prepBalance.setLong(5, UNIDAD_DE_NEGOCIO);
            if (!this.datosActuales && !hBalance.containsKey(PUC+""+MONEDA+""+VALOR+""+PRODUCTO+""+UNIDAD_DE_NEGOCIO)) {
                hBalance.put(PUC+""+MONEDA+""+VALOR+""+PRODUCTO+""+UNIDAD_DE_NEGOCIO,PUC+""+MONEDA+""+VALOR+""+PRODUCTO+""+UNIDAD_DE_NEGOCIO);
                this.executeBatch(prepBalance,++totalBLC);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Balance:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepBalance.close();
                prepBalance=null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(RelacionesformatounidadessubcuentasbalancesDTO DTO) {
        Long IDFORMATO = DTO.getIdformato();
        Long IDBALANCE = DTO.getIdbalance();
        try {
            if (prepBalancessubcuentas == null) {
                String varSqlInsert = "INSERT INTO RELACIONBALANCESUBCUENTA (PUC , IDFORMATO ,  UNIDADDECAPTURA,  SUBCUENTA ) VALUES(?,?,?,?)";
                prepBalancessubcuentas = conn.prepareStatement(varSqlInsert);
            }
            String UNIDADDECAPTURA = DTO.getUnidaddecaptura();
            String SUBCUENTA = DTO.getSubcuenta();
            prepBalancessubcuentas.setLong(1, IDBALANCE);
            prepBalancessubcuentas.setLong(2, IDFORMATO);
            prepBalancessubcuentas.setString(3, UNIDADDECAPTURA);
            prepBalancessubcuentas.setString(4, SUBCUENTA);
            if (!this.datosActuales && !hBalancessubcuentas.containsKey(IDBALANCE+""+IDFORMATO+""+UNIDADDECAPTURA+""+SUBCUENTA)) {
                hBalancessubcuentas.put(IDBALANCE+""+IDFORMATO+""+UNIDADDECAPTURA+""+SUBCUENTA,IDBALANCE+""+IDFORMATO+""+UNIDADDECAPTURA+""+SUBCUENTA);
                this.executeBatch(prepBalancessubcuentas,++totalRFUS);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:RelacionesBalanceSubCuentas:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepBalancessubcuentas.close();
                prepBalancessubcuentas = null;
            } catch (Exception ex) {
            }
        }
    }

    protected void GrabarDatos(Relacionespeciessubcuenta rela) {
        String mIsin = rela.getISIN();
        String mTipo = rela.getTIPO();
        try {
            if (prepRelacionespeciessubcuenta == null) {
                String varSqlInsert = "Insert into RELACIONESPECIESSUBCUENTAS(ISIN,TIPO,FORMATO,UNIDAD,SUBCUENTA,SALDOCONTABLE) values(?,?,?,?,?,?)";
                prepRelacionespeciessubcuenta = conn.prepareStatement(varSqlInsert);
            }
            int mFormato = rela.getFORMATO();
            String mUnidad = rela.getUNIDAD();
            String mSubcuenta = rela.getSUBCUENTA();
            double mSaldocontable = rela.getSALDOCONTABLE();
            prepRelacionespeciessubcuenta.setString(1, mIsin);
            prepRelacionespeciessubcuenta.setString(2, mTipo);
            prepRelacionespeciessubcuenta.setInt(3, mFormato);
            prepRelacionespeciessubcuenta.setString(4, mUnidad);
            prepRelacionespeciessubcuenta.setString(5, mSubcuenta);
            prepRelacionespeciessubcuenta.setDouble(6, mSaldocontable);
            if (!this.datosActuales && !hRelacionespeciessubcuenta.containsKey(mIsin + mTipo + mFormato)) {
                hRelacionespeciessubcuenta.put(mIsin + mTipo + mFormato, mIsin + mTipo + mFormato);
                this.executeBatch(prepRelacionespeciessubcuenta,++totalRES);
            }
        } catch (Exception e) {
            String key = ("[" + modelo + "]:Relacionespeciessubcuenta:" + e.toString());
            HErrores.put(key, HErrores.containsKey(key) ? HErrores.get(key) + 1 : 1);
        } finally {
            try {
                prepRelacionespeciessubcuenta.close();
                prepRelacionespeciessubcuenta=null;
            } catch (Exception ex) {
            }
        }
    }




    //==============================================================================
    public void ejbCreate(){}

    /**
     * 1:Tasas <br/>
     * 2:Monedas <br/>
     * 3:Emisores<br/>
     * 4:Especies by ISIN<br/>
     * 5:Unidadesnegocios<br/>
     * 6:Productos<br/>
     * 7:LIBROS<br/>
     * 8:Acciones<br/>
     * 9:CONTRATOS BY ID<br/>
     * 10:CUENTAS<br/>
     * 11:CONTRATOSSIMPLES<br/>
     *
     * @param opcion
     * @param nombre
     * @return
     */
    public long buscarPorNombre(int opcion, String nombre, boolean showWarnig,String source) {
        Long mRes = 0L;
        String varSqlSelect = "";
        String mensaje = "";
        try {
            switch (opcion) {
                case 1:
                    if(hBusquedaTasa.containsKey(nombre.trim())){
                        return hBusquedaTasa.get(nombre.trim());
                    }
                    mensaje = "Tasas";
                    varSqlSelect = "Select ID from Tasas Where Nombre=?";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setString(1, nombre.trim());
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaTasa.put(nombre.trim(), mRes);
                    }

                    break;
                case 2:
                    if(hBusquedaMonedas.containsKey(nombre.trim())){
                        return hBusquedaMonedas.get(nombre.trim());
                    }
                    varSqlSelect = "Select ID from Monedas Where Nombre=?";
                    mensaje = "Monedas";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setString(1, nombre.trim());
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaMonedas.put(nombre.trim(), mRes);
                    }
                    break;
                case 3:
                    if(hBusquedaEmisores.containsKey(nombre.trim())){
                        return hBusquedaEmisores.get(nombre.trim());
                    }
                    varSqlSelect = "Select ID from Emisores Where Nombre=?";
                    mensaje = "Emisores";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setString(1, nombre.trim());
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaEmisores.put(nombre.trim(), mRes);
                    }
                    break;
                case 4:
                    if(hBusquedaEspecies.containsKey(nombre.trim())){
                        return hBusquedaEspecies.get(nombre.trim());
                    }
                    varSqlSelect = "Select ID from Especies Where ISIN=?";
                    mensaje = "Especies";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setString(1, nombre.trim());
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaEspecies.put(nombre.trim(), mRes);
                    }
                    break;
                case 5:
                    if(hBusquedaUnidNego.containsKey(nombre.trim())){
                        return hBusquedaUnidNego.get(nombre.trim());
                    }
                    varSqlSelect = "Select ID from Unidadesnegocios Where Nombre=?";
                    mensaje = "Unidadesnegocios";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setString(1, nombre.trim());
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaUnidNego.put(nombre.trim(), mRes);
                    }
                    break;
                case 6:
                    if(hBusquedaProducto.containsKey(nombre.trim())){
                        return hBusquedaProducto.get(nombre.trim());
                    }
                    varSqlSelect = "Select ID from Productos Where Nombre=?";
                    mensaje = "Productos";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setString(1, nombre.trim());
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaProducto.put(nombre.trim(), mRes);
                    }
                    break;
                case 7:
                    if(hBusquedaLibro.containsKey(nombre.trim())){
                        return hBusquedaLibro.get(nombre.trim());
                    }
                    varSqlSelect = "SELECT ID  FROM LIBROS WHERE NOMBRE=?";
                    mensaje = "Libros";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setString(1, nombre.trim());
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaLibro.put(nombre.trim(), mRes);
                    }
                    break;
                case 8:
                    if(hBusquedaAccion.containsKey(nombre.trim())){
                        return hBusquedaAccion.get(nombre.trim());
                    }
                    varSqlSelect = "Select ID from Acciones Where Nombre=?";
                    mensaje = "Acciones";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setString(1, nombre.trim());
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaAccion.put(nombre.trim(), mRes);
                    }
                    break;
                case 9:
                    if(hBusquedaContrato.containsKey(nombre.trim())){
                        return hBusquedaContrato.get(nombre.trim());
                    }
                    varSqlSelect = "Select ID from CONTRATOS Where ID=?";
                    mensaje = "Contratos";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setInt(1, Integer.valueOf(nombre.trim()));
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaContrato.put(nombre.trim(), mRes);
                    }
                    break;
                case 10:
                    if(hBusquedaCuentas.containsKey(nombre.trim())){
                        return hBusquedaCuentas.get(nombre.trim());
                    }
                    varSqlSelect = "Select ID from CUENTAS Where NOMBRE=?";
                    mensaje = "Cuentas";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setString(1, nombre);
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaCuentas.put(nombre.trim(), mRes);
                    }
                    break;
                case 11:
                    if(hBusquedaContratosSimple.containsKey(nombre.trim())){
                        return hBusquedaContratosSimple.get(nombre.trim());
                    }
                    varSqlSelect = "Select ID from CONTRATOSSIMPLES Where NOMBRE=?";
                    mensaje = "Contratos Simple";
                    prep = conn.prepareStatement(varSqlSelect);
                    prep.setString(1, nombre);
                    rs = prep.executeQuery();
                    if (rs.next()) {
                        mRes = Long.parseLong(rs.getString("ID"));
                        hBusquedaContratosSimple.put(nombre.trim(), mRes);
                    }
                    break;                    
            }
        } catch (Exception e) {
            println("Buscando por nombre:" + nombre);
            println("Advertencia " + mensaje + "-BuscarporNombre:" + e.getMessage());
            mensaje += (" - Error :"+ e.getMessage());
        } finally {
            try {
                prep.close();
            } catch (Exception e) {
            }
            try {
                rs.close();
            } catch (Exception e) {
            }
        }
        if (mRes == 0 && showWarnig) {
            String key = ("No se pudo encontrar en nombre [" + nombre.trim() + "], en la tabla : " + mensaje );//+" almacenando "+source);
            printDebug(key);
        }
        return mRes;
    }

    private void executeBatch(PreparedStatement _ps, int _total) throws Exception {
        if (_ps != null /*&& !ps.isClosed()*/) {
            _ps.executeUpdate();
//            if (((_total % esperProQuery) == 0)) {
//                _ps.executeBatch();
//                _ps.close();
//                _ps = null;
//            } else {
//                _ps.addBatch();
//            }
        }
    }


    String mensajeAnterio="";
    protected synchronized void println(String mensaje){
        if(mensajeAnterio.equalsIgnoreCase(mensaje)){
            return;
        }
        mensajeAnterio = mensaje;
        GenerarHTML.gewInstace().println(mensaje);
    }
    protected void print(String mensaje){
        GenerarHTML.gewInstace().print(mensaje);
    }

    protected void printDebug(String mensaje){
        GenerarHTML.gewInstace().printDebug(mensaje);
    }

    public String getDirHTML(Date fecha, String modelo){
        if( GenerarHTML.gewInstace().getDirectorio()==null || GenerarHTML.gewInstace().getDirectorio().trim().isEmpty() ){
            Calendar calendario=Calendar.getInstance();
            calendario.setTime(fecha);
            String DIR_HTML=modelo.trim().replaceAll(" ","_")
                    +""
                    +calendario.get(Calendar.YEAR)
                    +""
                    +calendario.get(Calendar.MONTH)
                    +""
                    +calendario.get(Calendar.DAY_OF_MONTH)
                    +"-"
                    +new Date().getTime();
            GenerarHTML.gewInstace().setDirectorio(DIR_HTML);
        }
        return GenerarHTML.gewInstace().getDirectorio();
    }

    protected InitialContext getInitialContext() throws NamingException, Exception{
        Properties prop = new Properties();
        prop.put( Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
        String Sockec = new ConexionServer().getSocketServer();
        prop.put( Context.PROVIDER_URL, Sockec);
        return new InitialContext(prop);
    }

    protected void printErroresQuery(){
        Enumeration enumeration=HErrores.keys();
        while(enumeration.hasMoreElements()){
            String key=(String) enumeration.nextElement();
            println(".");
            println(HErrores.get(key)+" MENSAJES TIPO 10:"+key);
        }
        HErrores=new Hashtable<String,Integer>();
    }

    protected void limpiarTablas() throws SQLException {
        try {
            /*Properties prop = new Properties();
            prop.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
            String Sockec = new ConexionServer().getSocketServer();
            prop.put(Context.PROVIDER_URL, Sockec);*/
            st = conn.createStatement();
            if (!this.datosActuales) {
                st.execute("DELETE FROM BALANCE");
                /*try {
                    Iterator i = ((PosicionAccionHome) new InitialContext(prop).lookup("ig.finanzas.PosicionAccion")).findAll().iterator();
                    while (i.hasNext()) {
                        ((PosicionAccion) i.next()).remove();
                    }
                } catch (Exception exception) {
                    System.out.println("Err:PA");
                }*/
                st.execute("DELETE FROM POSICIONESACCIONES");

                /*try {
                    Iterator i = ((PosicionEspecieHome) new InitialContext(prop).lookup("ig.finanzas.PosicionEspecie")).findAll().iterator();
                    while (i.hasNext()) {
                        ((PosicionEspecie) i.next()).remove();
                    }
                } catch (Exception exception) {
                    System.out.println("Err:PE");
                }*/
                st.execute("DELETE FROM POSICIONESESPECIES");
            }
            st.execute("DELETE FROM CALCULOSRENTABILIDADCONTRATOS");
            if (!this.datosActuales) {
                /*try {
                    Iterator i = ((ContratoSimpleHome) new InitialContext(prop).lookup("ig.finanzas.ContratoSimple")).findAll().iterator();
                    while (i.hasNext()) {
                        ((ContratoSimple) i.next()).remove();
                    }
                } catch (Exception exception) {
                    System.out.println("Err:CS");
                }*/
                st.execute("DELETE FROM CONTRATOSSIMPLES");
            }
            st.execute("DELETE FROM FLUJOSLIQUIDEZ");
            st.execute("DELETE FROM BANDASLIQUIDEZ");
            if (!this.datosActuales) {
                st.execute("DELETE FROM FLUJOS");
                st.execute("DELETE FROM VALORESTASAS");
                st.execute("DELETE FROM TASASDEPAGOS");
                /*try {
                    Iterator i = ((TasaHome) new InitialContext(prop).lookup("ig.finanzas.Tasa")).findAll().iterator();
                    while (i.hasNext()) {
                        ((Tasa) i.next()).remove();
                    }
                } catch (Exception exception) {
                    System.out.println("Err:T");
                }*/
                st.execute("DELETE FROM TASAS");
                st.execute("DELETE FROM VALORESCONTRATOS");
            }

            st.execute("DELETE FROM VARCONTRATOSPRECIO");
            st.execute("DELETE FROM VARCONTRATOSTASA");
            st.execute("DELETE FROM BANDASVAR");

            if (!this.datosActuales) {
                st.execute("DELETE FROM ADICONTRATOSRENTABILIDAD");
            }

            st.execute("DELETE FROM CAMBIOESPERADOMONEDAS");

            if (!this.datosActuales) {
                st.execute("DELETE FROM CONTRATOS");
                st.execute("DELETE FROM PRODUCTOS");
                st.execute("DELETE FROM VALORESMONEDAS");
                st.execute("DELETE FROM ESPECIES");
                st.execute("DELETE FROM ACCIONES");
                /*try {
                    Iterator i = ((MonedaHome) new InitialContext(prop).lookup("ig.finanzas.Moneda")).findAll().iterator();
                    while (i.hasNext()) {
                        ((Moneda) i.next()).remove();
                    }
                } catch (Exception exception) {
                    System.out.println("Err:M");
                }*/
                st.execute("DELETE FROM MONEDAS");
                st.execute("DELETE FROM UNIDADESNEGOCIOS");
                st.execute("DELETE FROM EMPRESAS");
                st.execute("DELETE FROM CUENTAS");
                st.execute("DELETE FROM LIBROS");
                st.execute("DELETE FROM EMISORES");
                st.execute("DELETE FROM RELACIONACCIONESSUBCUENTAS");
                st.execute("DELETE FROM RELACIONESPECIESSUBCUENTAS");
                st.execute("DELETE FROM RELACIONMONEDASSUBCUENTAS");
                st.execute("DELETE FROM RELACIONBALANCESUBCUENTA");
                st.execute("DELETE FROM RELACIONSUBCUENTASPRODUCTOS");
            }

        } catch (Exception e) {
            e.printStackTrace();
            println("[" + modelo + "]:MENSAJE TIPO 10: LimpiarTablas:" + e.toString());
            throw new SQLException("LimpiarTablas:" + e.toString());
        } finally {
            try {
                st.close();
            } catch (Exception e) {
            }
        }
        try {
            st = conn1.createStatement();
            st.execute("DELETE FROM ESCENARIOS WHERE ESTADO=1");
            st.execute("DELETE FROM ESCENARIOS WHERE ESTADO=0");
        } catch (Exception e) {
            e.printStackTrace();
            println("[" + modelo + "]:MENSAJE TIPO 10:Borrando ESCENARIOS:" + e.toString());
            throw new SQLException("LimpiarTablas:" + e.toString());
        } finally {
            try {
                st.close();
            } catch (Exception e) {
            }
        }
    }

    /**
     * Cancela todos los posibles statement en curso
     */
    protected void cancelarStatement() {
        try{origenesdatos.close();}catch(Exception e){System.out.println("close:"+e.toString());}
        try{prepMoneda.cancel();}catch(Exception e){}
        try{prepValoresMoneda.cancel();}catch(Exception e){}
        try{prepTasas.cancel();}catch(Exception e){}
        try{prepValoresTasa.cancel();}catch(Exception e){}
        try{prepEmpresas.cancel();}catch(Exception e){}
        try{prepUnidesNegocios.cancel();}catch(Exception e){}
        try{prepTasasdepagos.cancel();}catch(Exception e){}
        try{prepFlujos.cancel();}catch(Exception e){}
        try{prepContratossimples.cancel();}catch(Exception e){}
        try{prepAcciones.cancel();}catch(Exception e){}
        try{prepContratos.cancel();}catch(Exception e){}
        try{prepValorescontratos.cancel();}catch(Exception e){}
        try{prepPosicionesespecies.cancel();}catch(Exception e){}
        try{prepPosicionesacciones.cancel();}catch(Exception e){}
        try{prepAdicionalescontratosrenta.cancel();}catch(Exception e){}
        try{prepEspecies.cancel();}catch(Exception e){}
        try{prepCuentas.cancel();}catch(Exception e){}
        try{prepLibros.cancel();}catch(Exception e){}
        try{prepProductos.cancel();}catch(Exception e){}
        try{prepEmisores.cancel();}catch(Exception e){}
        try{prepBalance.cancel();}catch(Exception e){}
        try{prepRelacionmonedassubcuentas.cancel();}catch(Exception e){}
        try{prepRelacionespeciessubcuenta.cancel();}catch(Exception e){}
        try{prepRelacionsubcuentasproductos.cancel();}catch(Exception e){}
        try{prepRelacionaccionessubcuentas.cancel();}catch(Exception e){}
        try{prepBalancessubcuentas.cancel();}catch(Exception e){}
    }

    @SuppressWarnings("static-access")
    protected void cleanContadores() {
        //GenerarHTML.gewInstace().deleteInstace();
        this.linea=0;
        this.idMoneda = 1L;
        this.idTasas = 1L;
        this.idEmpresas = 1L;
        this.idEspecies = 1L;
        this.idAcciones = 1L;
        this.idEmisores = 1L;
        this.idProductos = 1L;
        this.idCuentas = 1L;
        this.idLibros = 1L;
        this.idUnidadesnegocios = 1L;
        this.ContratosSaldoProcesado = new Hashtable<Long, Boolean>();
        this.ContratosParaProyectarFlujos = new Hashtable<Long, Contratos>();
        this.CEmpresas = new ArrayList<Empresas>();
        this.balanceLocal = new ConfiguracionBalanceSBBean();
        this.CConfiguracionBalances = null;
        this.HProductosFormulados = new Hashtable<String, Long>();
        this.matriz = null;
        this.matrizH = null;
        //this.idContrato = -1;
        this.ctx = null;
        this.HOrigenesYaProcesados = new Hashtable<Integer, String>();
        this.hMonedas = new Hashtable();
        this.hValoresMonedas = new Hashtable();
        this.hTasas = new Hashtable();
        this.hValoresTasas = new Hashtable();
        this.hEmpresas = new Hashtable();
        this.hTasasdepagos = new Hashtable();
        this.hFlujos = new Hashtable();
        this.hContratossimples = new Hashtable();
        this.hAcciones = new Hashtable();
        this.hContratos = new Hashtable();
        this.hValorescontratos = new Hashtable();
        this.hPosicionesespecies = new Hashtable();
        this.hPosicionesacciones = new Hashtable();
//        this.hAdicionalescontratosrenta = new Hashtable();
        this.hEspecies = new Hashtable();
        this.hUnidadesNegocios = new Hashtable();
//        this.hCuentas = new Hashtable();
//        this.hLibros = new Hashtable();
//        this.hProductos = new Hashtable();
        this.hEmisores = new Hashtable();
        this.hBalance = new Hashtable();
        this.hRelacionmonedassubcuentas = new Hashtable();
        this.hRelacionespeciessubcuenta = new Hashtable();
        this.hRelacionsubcuentasproductos = new Hashtable();
        this.hRelacionaccionessubcuentas = new Hashtable();
        hBusquedaTasa =new Hashtable<String, Long>();
        hBusquedaTasa = new Hashtable<String, Long>();
        hBusquedaMonedas = new Hashtable<String, Long>();
        hBusquedaEmisores = new Hashtable<String, Long>();
        hBusquedaEspecies = new Hashtable<String, Long>();
        hBusquedaUnidNego = new Hashtable<String, Long>();
        hBusquedaProducto = new Hashtable<String, Long>();
        hBusquedaLibro = new Hashtable<String, Long>();
        hBusquedaAccion = new Hashtable<String, Long>();
        hBusquedaContrato = new Hashtable<String, Long>();
        hBusquedaCuentas = new Hashtable<String, Long>();
        hBusquedaContratosSimple = new Hashtable<String, Long>();
        hP = new Hashtable<Long, Long[]>();
        hBalancessubcuentas= new Hashtable<String, Integer>();
    }

    private Integer linea = 0;
    protected boolean debug=true;

    protected PreparedStatement prepMoneda=null;
    protected Hashtable hMonedas=null;
    protected PreparedStatement prepValoresMoneda=null;
    protected Hashtable hValoresMonedas=null;
    protected PreparedStatement prepTasas=null;
    protected Hashtable hTasas=null;
    protected PreparedStatement prepValoresTasa=null;
    protected Hashtable hValoresTasas=null;
    protected PreparedStatement prepEmpresas=null;
    protected Hashtable hEmpresas=null;
    protected PreparedStatement prepUnidesNegocios =null;
    protected Hashtable hUnidadesNegocios=null;
    protected PreparedStatement prepTasasdepagos=null;
    protected Hashtable hTasasdepagos=null;
    protected PreparedStatement prepFlujos =null;
    protected Hashtable hFlujos=null;
    protected PreparedStatement prepContratossimples =null;
    protected Hashtable hContratossimples=null;
    protected PreparedStatement prepAcciones =null;
    protected Hashtable hAcciones=null;
    protected PreparedStatement prepContratos=null;
    protected Hashtable hContratos=null;
    protected PreparedStatement prepValorescontratos=null;
    protected Hashtable hValorescontratos=null;
    protected PreparedStatement prepPosicionesespecies=null;
    protected Hashtable hPosicionesespecies=null;
    protected PreparedStatement prepPosicionesacciones=null;
    protected Hashtable hPosicionesacciones=null;
    protected PreparedStatement prepAdicionalescontratosrenta=null;
    protected PreparedStatement prepEspecies=null;
    protected Hashtable hEspecies=null;
    protected PreparedStatement prepCuentas =null;
    protected PreparedStatement prepLibros =null;
    protected PreparedStatement prepProductos =null;
    protected PreparedStatement prepEmisores =null;
    protected Hashtable hEmisores=null;
    protected PreparedStatement prepBalance = null;
    protected Hashtable hBalance=null;
    protected PreparedStatement prepRelacionmonedassubcuentas=null;
    protected Hashtable hRelacionmonedassubcuentas=null;
    protected PreparedStatement prepRelacionespeciessubcuenta=null;
    protected Hashtable hRelacionespeciessubcuenta=null;
    protected PreparedStatement prepRelacionsubcuentasproductos=null;
    protected Hashtable hRelacionsubcuentasproductos=null;
    protected PreparedStatement prepRelacionaccionessubcuentas=null;
    protected Hashtable hRelacionaccionessubcuentas=null;
    protected PreparedStatement prepBalancessubcuentas=null;
    protected Hashtable hBalancessubcuentas=null;

    protected static Integer IdEscenario =-1;
    protected Long idMoneda=1L;
    protected Long idTasas=1L;
    protected Long idEmpresas= 1L;
    protected Long idEspecies= 1L;
    protected Long idAcciones= 1L;
    protected Long idEmisores= 1L;
    protected Long idProductos= 1L;
    protected Long idCuentas= 1L;
    protected Long idLibros = 1L;
    protected Long idUnidadesnegocios = 1L;
    protected Hashtable<Long,Contratos> ContratosParaProyectarFlujos= new Hashtable<Long,Contratos>();
    protected Hashtable<Long,Boolean> ContratosSaldoProcesado= new Hashtable<Long,Boolean>();
    protected PreparedStatement prep=null;

    protected Statement st = null;
    protected ResultSet rs = null;
    //protected int[] mconfPeriodosLiquidez=null;
    //protected int[] mconfPeriodosMercado=null;
    protected Hashtable mrelacionProductosFactores;
    protected Hashtable mrelacionEspeciesFactores;
    protected Hashtable mrelacionMonedasFactores;
    protected Hashtable mcomportamientoAcciones;
    protected FactorRiesgoMatrizCorrelacion frmc=null;
    protected Connection conn2 = null;
    protected TasaPK tasaPK=null;
    protected DefinidorCalculoCambioEsperado def=null;
    protected MatrizDTO matriz=null;
    protected Hashtable matrizH=null;//en la matriz seleccionada en el modelo, esta puede se o matriz de correlacion o la escalera de bandas
    protected Hashtable matrizDeChoques=null;//son las matrice de choques mapeadas en la de escalera de bandas
    protected String modelo=null;
    protected ProductoPK productoPK=null;
    protected Origenesdatos element =null;
    protected ModeloSBean modeloSBean=null;
    protected String NOMBRE_ESCENARIO=null;
    protected Collection<ConfiguracionflujosDTO> CConfigFlujos=null;
    protected Timestamp fechaCorte=null;
    protected Collection<ConFlujosFormuladosDTO> CConFlujosFormulados=null;
    protected Hashtable<String,Integer> HErrores=new Hashtable<String,Integer>();
    protected Collection<Empresas> CEmpresas = new ArrayList<Empresas>();
    protected ConfiguracionBalanceSBBean balanceLocal=new ConfiguracionBalanceSBBean();
    protected Collection CConfiguracionBalances=null;

    protected Hashtable<String,Long> HProductosFormulados=null;
    //protected int idContrato=-1;
    static final long serialVersionUID = 01;
    protected Integer idModelo=null;
    protected boolean datosActuales=false;
    protected Hashtable<Integer,String> HOrigenesYaProcesados=new Hashtable<Integer,String>();
    protected Origenesdatos origenesdatos  = null;

    protected Hashtable<String,Long> hBusquedaTasa=new Hashtable<String,Long>();
    protected Hashtable<String,Long> hBusquedaMonedas=new Hashtable<String,Long>();
    protected Hashtable<String,Long> hBusquedaEmisores=new Hashtable<String,Long>();
    protected Hashtable<String,Long> hBusquedaEspecies=new Hashtable<String,Long>();
    protected Hashtable<String,Long> hBusquedaUnidNego=new Hashtable<String,Long>();
    protected Hashtable<String,Long> hBusquedaProducto=new Hashtable<String,Long>();
    protected Hashtable<String,Long> hBusquedaLibro=new Hashtable<String,Long>();
    protected Hashtable<String,Long> hBusquedaAccion=new Hashtable<String,Long>();
    protected Hashtable<String,Long> hBusquedaContrato=new Hashtable<String,Long>();
    protected Hashtable<String,Long> hBusquedaCuentas=new Hashtable<String,Long>();
    protected Hashtable<String,Long> hBusquedaContratosSimple=new Hashtable<String,Long>();
    protected Hashtable<Long,Long[]> hP=new Hashtable<Long,Long[]>();
    protected int totalMDA=0;
    protected int totalRES=0;
    protected int totalRFUS=0;
    protected int totalBLC=0;
    protected int totalRMS=0;
    protected int totalESP=0;
    protected int totalACR=0;
    protected int totaolPES=0;
    protected int totalVC=0;
    protected int totalCTOS=0;
    protected int totalPA=0;
    protected int totalCTO=0;
    protected int totalFLJ=0;
    protected int totalTP=0;
    protected int totalRAP=0;
    protected int totalRAS=0;
    protected int totalAC=0;
    protected int totalUN=0;
    protected int totalVM=0;
    protected int totalTSA=0;
    protected int totalVT=0;
    protected int totalEm=0;
    protected static String LINEA_LARGA="_______________________________________________________________________________________________________________";
    protected static String BR="<BR>";
    protected String valorAnterior="";
}

class Tiempo{
    private Integer segundos=0;
    public Tiempo(){
        Timer timer = new Timer(1000, new ActionListener(){
            public void actionPerformed(ActionEvent e){
                segundos++;
            }
        });
        timer.start();
    }

    public Integer getSegundos() {
        return segundos;
    }

    public Double getMinutos() {
        return segundos>=60?Double.valueOf(segundos.toString())/60:0D;
    }

    public void finalizar(){
        try{this.finalize();}catch(Throwable e){}
    }
    

}